package animal;

import java.io.File;

import sim.AmeisenSimulation;
import sim.AntSimEntity;
import sim.SimulationParameters;

/**
 * Ein gefraessiger Kaefer.
 * 
 * @author Shkelqim Turklaj
 * @version 3
 */

public class Kaefer extends Fresstier {

	private SimulationParameters simParam = new SimulationParameters();

	public Kaefer(String bezeichnung, double x, double y) {
		super();
		setX(x);
		setY(y);
		setGrafik(simParam.getGrafikKaefer());
		setBezeichnung(bezeichnung);
		setHungerJagdLimit(15);
		setHungerTodLimit(simParam.getMaxTodHunger());
		setBeschriftung(getBezeichnung() + " (" + "Get�tet: " + getBeute()
				+ ")");
		setMaxGeschwindigkeit(simParam.getLaufgeschwindigkeitKaefer());
		setSchrittweite(simParam.getLaufgeschwindigkeitKaefer());
	}

	/**
	 * Das Kaefer sucht nach Beute und versucht diese zu fressen.
	 * 
	 * @ param asim - die Simulation
	 */
	public void jageAmeisen(AmeisenSimulation asim) {
		if (!this.getLebensZustand()) {
			return;
		}
		if (hatHunger() && isKeineGefahr()) {

			Ameise zielAmeise = findeNaechsteAmeise(asim.getAlleAmeisen());

			if (zielAmeise != null) {

				if (verspeisenDerAmeiseMoeglich(zielAmeise)) {

					zielAmeise.setLebendig(false);
					// new AudioPlayer("/sounds/bite.mp3").play();
					asim.getAudioSystem().playSound("sounds/bite.ogg", 1f,
							false);
					erhoeheBeute(20);
					if (getBeute() % (simParam.getAppetit() + 1) == 0) {
						setHungrig(false);
						setFressPauseBeginn(System.currentTimeMillis());
					}

				} else {

					laufeGezielt(asim, zielAmeise.getX(), zielAmeise.getY(),
							5.5, 5.5);
				}

			} else {

				laufeZufaellig(asim, 10.5, 10.5);

			}

		} else {

			if (System.currentTimeMillis() - getFressPauseBeginn() > getFressPauseDauer()) {
				setHungrig(true);
			}

			laufeZufaellig(asim, 10.5, 10.5);
		}
	}

	@Override
	public void jageKaefer(AmeisenSimulation asim) {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLebendig(boolean lebendig, int killType) {
		super.setLebendig(lebendig);
		switch (killType) {
		case 0:
			setGrafik(simParam.getGrafikGetoeteteKaefer());
			break;
		case 1:
			setGrafik(simParam.getGrafikHungertodKaefer());
		}
	}

	@Override
	public void jage(AmeisenSimulation asim, AntSimEntity beute) {
		jageAmeise(asim, beute);
	}

	private void jageAmeise(AmeisenSimulation asim, AntSimEntity beute) {
		if (!this.getLebensZustand()) {
			return;
		}
		if (hatHunger()) {
			if (beute != null && (beute.getRef() instanceof Ameise)) {
				Ameise ameise = (Ameise) beute.getRef();
				if (verspeisenDerAmeiseMoeglich(ameise)) {
					ameise.setLebendig(false);
					// new AudioPlayer("/sounds/bite.mp3").play();
					asim.getAudioSystem().playSound("sounds/bite.ogg", 1f,
							false);
					erhoeheBeute(10);
					if (getBeute() % (simParam.getAppetit() + 1) == 0) {
						setHungrig(false);
						setFressPauseBeginn(System.currentTimeMillis());
					}
				} else {

					laufeGezielt(asim, ameise.getX(), ameise.getY(), 5.5, 5.5);
				}

			} else {

				laufeZufaellig(asim, 10.5, 10.5);

			}

		} else {

			if (System.currentTimeMillis() - getFressPauseBeginn() > getFressPauseDauer()) {
				setHungrig(true);
			}

			laufeZufaellig(asim, 10.5, 10.5);
		}
	}

}
